﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace GIFT2
{
    class ControlFormulario
    {
        private ConsultasFormularios misConsultas;
        private static Regex _isNumber = new Regex(@"^\d+$");

        public ControlFormulario() 
        {
            misConsultas = new ConsultasFormularios();
        }

        public ArrayList obtenerFormularios() 
        {
            ArrayList forms = misConsultas.obtieneFormularios();
            return forms;
        }

        public void eliminaFormularios(string cualFormulario) 
        { 
            misConsultas.eliminaFormulario(cualFormulario);
        }

        public bool verificaNumerico (string texto)
        {
            Match m = _isNumber.Match(texto);
            return m.Success;
        }

        public ArrayList obtieneAtributosFormulario(String cualFormulario)
        {
            ArrayList form = misConsultas.obtieneAtributosFormulario(cualFormulario);
            return form;
        }

        public object obtieneIcono(String cualFormulario) 
        {
            object icono = misConsultas.obtieneIcono(cualFormulario);
            return icono;
        }

        public void guardarFormulario(String nombre, String descripcion, String X, String Y)
        {
            misConsultas.guardaFormulario(nombre, descripcion, X, Y);
        }

        public void guardaIcono(byte[] photo, String cualFormulario)
        {
            misConsultas.guardaIcono(photo, cualFormulario);
        }

        public bool verificaExistenciaFormulario(String cualFormulario) 
        {
            bool existe = misConsultas.verificaExistenciaFormulario(cualFormulario);
            return existe;
        }

        public void actualizaFormulario(String cualFormulario, String descripcion, String X, String Y)
        {
            misConsultas.actualizaFormulario(cualFormulario, descripcion, X, Y);
        }

        public void eliminaIcono(String cualFormulario) 
        {
            misConsultas.eliminaIcono(cualFormulario);
        }

        //Guarda un componente de un formulario, recibe los datos del componente, retorna un true si se agrego con exito
        public bool agregarComponente(String cualFormulario, String tipoComponenteBasico, String tipoComponente, String nombreComponente, String descripcionComponente, String tamanoX, String tamanoY, String posicionX, String posicionY, String nombreFuente, String tamanoFuente, String estiloFuente, String color)
        {
            String numeroFormulario = misConsultas.obtieneAtributoFormulario(cualFormulario, "numero");
            //Si todavia no existe el nombre
            if (!misConsultas.existeComponente(nombreComponente, numeroFormulario))
            {
                if (tipoComponenteBasico == "rotulo")
                {
                        //Agrega un rotulo
                        misConsultas.agregaRotulo(numeroFormulario, nombreComponente, descripcionComponente, tamanoX, tamanoY, posicionX, posicionY, nombreFuente,tamanoFuente,estiloFuente, color);
                }else
                {
                    misConsultas.agregaTipoCampo(numeroFormulario, nombreComponente, descripcionComponente, tamanoX, tamanoY, posicionX, posicionY,nombreFuente,tamanoFuente,estiloFuente, color, tipoComponenteBasico, tipoComponente);
                }
                return true; //informa el exito de la operacion
            }
            return false; //informa el fracaso de la operacion
        }

        public void eliminaComponente(String componente, String cualFormulario)
        {
            misConsultas.eliminaComponente(componente, cualFormulario);
        }

        public ArrayList obtieneTiposCampo(String cualTipoCampo)
        {
            ArrayList tiposCampo = misConsultas.obtieneTiposCampo(cualTipoCampo);
            return tiposCampo;
        }

        //Retorna true si el nombre ya existe en los componentes de los formularios
        public bool verificaExistenciaComponente(String nombreComponente, String cualFormulario)
        {
            String numeroFormulario = misConsultas.obtieneAtributoFormulario(cualFormulario, "numero");
            return misConsultas.existeComponente(nombreComponente, numeroFormulario);
        }

       
        public ArrayList cargaComponentes(String cualFormulario)
        {
            ArrayList tiposCampo = misConsultas.cargaComponentes(cualFormulario);
            return tiposCampo;
        }


        public ArrayList obtieneComponentes(String cualFormulario)
        {
            ArrayList tiposCampo = misConsultas.obtieneComponentes(cualFormulario);
            return tiposCampo;
        }


        public String obtieneAtributoEspecificoComponenteFormulario(String nombre, String atributo, String nombre_formulario)
        {
            return misConsultas.atributo_componente_formulario(nombre, atributo, nombre_formulario);
        }

        public void editarComponenteFormulario(String nombre_actual, String nombre_nuevo, String descripcion, String nombre_formulario)
        {
            misConsultas.editar_componente_formulario(nombre_actual, nombre_nuevo, descripcion, nombre_formulario);
        }

        //Va a cambiar el punto en que se encuentra el componente
        public void cambiarPunto(String nombreFormulario, String nombreComponente, String X, String Y)
        {
            String numeroFormulario = misConsultas.obtieneAtributoFormulario(nombreFormulario, "numero");
            misConsultas.actualizaAtributoComponente(numeroFormulario, nombreComponente, "posicionX", X);
            misConsultas.actualizaAtributoComponente(numeroFormulario,nombreComponente, "posicionY", Y);
        }
        //calcula el tamanio de un componenteTipotexto basado en el atributo largo
        public int getLargoComponenteTipoTexto(String nombreTipoTexto)
        {
            int largo = misConsultas.getLargoTipoCampoTexto(nombreTipoTexto);
            //ahora debe convertir el numero de caracteres a su equivalente en numero de pixeles

            return largo;
        }

        //devuelve el valor de un atributo especifico de una tabla específica
        public String obtieneAtributoEspecificoTabla(String nombreTabla, String nombreAtributo, String atrCondicion, String condicion)
        {
            String resultado = misConsultas.obtieneAtributoEspecificoTabla(nombreTabla, nombreAtributo, atrCondicion, condicion);
            return resultado;
        }

        //obtiene los terminos de una lista
        public ArrayList obtieneTerminosLista(String lista)
        {
            return misConsultas.obtieneTerminosLista(lista);
        }
        public void editar_orden_tabulacion_componente_formulario(String nombre, String nombre_formulario, String orden_tabulacion)
        {
            misConsultas.editar_orden_tabulacion_componente_formulario(nombre, nombre_formulario, orden_tabulacion);
        }
    }//FIN DE CLASE   
}
